home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1997 May & June / Amiga-CD 1997 #5-6.iso / emulatoren / frodov2.4 / src / iec.h < prev    next >
C/C++ Source or Header  |  1996-01-29  |  4KB  |  122 lines

  1. /*
  2.  *  IEC.h - IEC-Bus-Routinen, 1541-Emulation
  3.  *
  4.  *  Copyright (C) 1994-1996 by Christian Bauer
  5.  */
  6.  
  7. #ifndef IEC_H
  8. #define IEC_H
  9.  
  10. #include <exec/types.h>
  11.  
  12.  
  13. // C64-Status-Codes
  14. #define ST_OK            0        // Alles klar
  15. #define ST_READ_TIMEOUT    0x02    // Timeout beim Lesen
  16. #define ST_TIMEOUT        0x03    // Timeout
  17. #define ST_EOF            0x40    // End of file
  18.  
  19. // 1541-Fehlercodes
  20. enum {
  21.   ERR_OK,                // 00 OK
  22.   ERR_WRITEERROR,        // 25 WRITE ERROR
  23.   ERR_WRITEPROTECT,        // 26 WRITE PROTECT ON
  24.   ERR_SYNTAX30,            // 30 SYNTAX ERROR (Unbekannter Befehl)
  25.   ERR_SYNTAX33,            // 33 SYNTAX ERROR (Wildcards beim Schreiben)
  26.   ERR_WRITEFILEOPEN,    // 60 WRITE FILE OPEN
  27.   ERR_FILENOTOPEN,        // 61 FILE NOT OPEN
  28.   ERR_FILENOTFOUND,        // 62 FILE NOT FOUND
  29.   ERR_ILLEGALTS,        // 67 ILLEGAL TRACK OR SECTOR
  30.   ERR_NOCHANNEL,        // 70 NO CHANNEL
  31.   ERR_STARTUP,            // 73 Einschaltmeldung
  32. };
  33.  
  34. // Maximale Länge eines Dateinamens
  35. #define NAMEBUF_LENGTH    256
  36.  
  37. // Struktur der BAM
  38. typedef struct {
  39.   UBYTE    dir_track;        // Spur...
  40.   UBYTE    dir_sector;        // ...und Sektor des ersten Directory-Blocks
  41.   BYTE    fmt_type;        // Format-Typ
  42.   BYTE    pad0;
  43.   UBYTE    bitmap[4*35];    // Belegung der Sektoren
  44.   UBYTE    disk_name[18];    // Name des Diskette
  45.   UBYTE    id[2];            // ID der Diskette
  46.   BYTE    pad1;
  47.   UBYTE    fmt_char[2];    // Formatzeichen
  48.   BYTE    pad2[4];
  49.   BYTE    pad3[85];
  50. } BAM;
  51.  
  52. // Struktur eines Verzeichniseintrags
  53. typedef struct {
  54.   UBYTE    type;            // Dateityp
  55.   UBYTE    track;            // Spur...
  56.   UBYTE    sector;            // ...und Sektor des ersten Datenblocks
  57.   UBYTE    name[16];        // Dateiname
  58.   UBYTE    side_track;        // Spur...
  59.   UBYTE    side_sector;    // ...und Sektor des ersten Side-Sektors
  60.   UBYTE    rec_len;        // Recordlänge
  61.   BYTE    pad0[4];
  62.   UBYTE    ovr_track;        // Spur...
  63.   UBYTE    ovr_sector;        // ...und Sektor beim Überschreiben
  64.   UBYTE    num_blocks_l;    // Anzahl Blocks, LSB
  65.   UBYTE    num_blocks_h;    // Anzahl Blocks, MSB
  66.   BYTE    pad1[2];
  67. } DirEntry;
  68.  
  69. // Struktur eines Verzeichnisblocks
  70. typedef struct {
  71.   UBYTE        next_track;
  72.   UBYTE        next_sector;
  73.   DirEntry    entry[8];
  74. } Directory;
  75.  
  76. // Datenstruktur für ein Laufwerk
  77. typedef struct {
  78.   char        type;                // Laufwerks-Typ
  79.   char        read_char;            // Byte-Puffer zum Lesen aus Dateien
  80.   char        name_length;        // Bisher empfangene Länge des Dateinamens
  81.   char        error_length;        // Restliche Länge der Fehlermeldung
  82.   char        *name_ptr;            // Zeiger in Dateinamen, für Open/IECOut
  83.   char        *error_ptr;            // Zeiger in Fehlermeldung
  84.   BPTR        lock;                // Lock des Verzeichnisses des Laufwerks
  85.                                 // bzw. Handle der .d64-Datei
  86.  
  87.   void        (*init_proc)();        // Initialisieren
  88.   void        (*exit_proc)();        // Beenden
  89.   int        (*open_proc)();        // Kanal öffnen
  90.   int        (*close_proc)();    // Kanal schließen
  91.   int        (*read_proc)();        // Byte lesen
  92.   int        (*write_proc)();    // Byte schreiben
  93.  
  94.   char        cmd_buffer[44];        // Eingabepuffer für Kommandos
  95.   int        cmd_length;            // Länge des bisher empfangenen Kommandos
  96.  
  97.   BPTR        handle[16];            // FS: FileHandles für alle 16 Kanäle
  98.  
  99.   char        chan_mode[16];        // D64: Kanalmodus
  100.   char        chan_buf_num[16];    // D64: Nummer des Puffers des Kanals (für Direktzugriffskanäle)
  101.   char        *chan_buf[16];        // D64: Zeiger auf Puffer des Kanals
  102.   char        *buf_ptr[16];        // D64: Aktuelle Position im Puffer
  103.   int        buf_len[16];        // D64: Restliche Anzahl Bytes im Puffer
  104.  
  105.   char        *ram;                // D64: 2KB RAM für das Laufwerk
  106.   char        buf_free[4];        // D64: Puffer 0..3 frei?
  107.  
  108.   int        image_header;        // D64: Länge des Headers der Image-Datei (.d64: 0, .x64: 64)
  109.  
  110.   BAM        *BAM;                // D64: Zeiger auf Puffer für BAM (Puffer 4, $700)
  111.   Directory    dir;                // D64: Temporärer Puffer für Directory-Blocks
  112. } DriveData;
  113.  
  114. // Prefs: '/' in Dateinamen konvertieren?
  115. extern WORD MapSlash;
  116.  
  117.  
  118. // Exportierte Funktionen
  119. extern void SetError(DriveData *drive, int error);
  120.  
  121. #endif
  122.